﻿// Backward Digit Sums POJ - 3187.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <cstring>


using namespace std;
//https://vjudge.csgrandeur.cn/problem/POJ-3187

/*
FJ 和他的奶牛们喜欢玩智力游戏。它们按照一定的顺序写下从 1 到 N（1 <= N <= 10）的数字，
然后将相邻的数字相加，得出一个少一个数字的新列表。
如此反复，直到只剩下一个数字为止。例如，有一次游戏（当 N=4 时）可能是这样的：
3   1   2   4
  4   3   6
    7   9
     16
在 FJ 的背后，奶牛们开始玩一个更难的游戏，它们试图只根据最终总数和数字 N 来确定起始序列。

请编写一个程序来帮助 FJ 玩这个游戏，并跟上奶牛们的步伐。

输入
第 1 行 两个空格分隔的整数： N 和最终总和。
输出
第 1 行 对整数 1...N 进行排序，得出给定的和。如果有多个解，则选择顺序最小的一个，即把较小的数字放在前面。

4 16

3 1 2 4
*/


const int N = 15;
int used[N];
int a[N];
int n,t;


bool Check() {
    int tmp[N]; memcpy(tmp, a, sizeof tmp);
    for (int limit = n; limit > 1; limit--) {
        for (int i = 0; i < limit-1; i++) {
            tmp[i] = tmp[i] + tmp[i + 1];
        }
    }
    if (tmp[0] == t) return true;

    return false;
}

bool dfs(int curr) {
    if (curr == n) {
        if (Check()) { return true;}
        return false;
    }

    for (int i = 1; i <= n; i++) {
        if (used[i] == 0) {
            a[curr] = i; used[i] = 1;
            if (dfs(curr + 1)) { return true; }
            used[i] = 0;
        }
    }

    return false;
}

int main()
{
    cin >> n>>t;
    dfs(0);

    for (int i= 0; i < n; i++) {
        cout << a[i] << " ";
    }

    return 0;
}
 